package com.flowable.service;

import com.flowable.common.result.CommonResult;

/**
 * 任务 接口
 */
public interface ProcTaskService {

    /**
     * 启动流程实例
     *
     * @param processDefinitionId 流程定义id
     * @param assignees           下一任务处理人(们)
     * @param extraData           额外信息
     * @return
     */
    CommonResult runProcess(String processDefinitionId, String[] assignees, String extraData);

    /**
     * 查询指定用户的待办任务
     *
     * @param processDefinitionId 流程定义id
     * @param processInstanceId   流程实例id
     * @param taskAssignee        当前任务处理人
     * @return
     */
    CommonResult queryTask(String processDefinitionId, String processInstanceId, String taskAssignee);

    /**
     * 完成当前任务，并提交到下一阶段任务
     *
     * @param processDefinitionId 流程定义id
     * @param processInstanceId   流程实例id
     * @param taskAssignee        当前任务处理人
     * @param assignees           下一任务处理人(们)
     * @param extraData           额外信息
     * @return
     */
    CommonResult completeTask(String processDefinitionId, String processInstanceId, String taskAssignee, String[] assignees, String extraData);

    /**
     * 回退任务，从源任务到目标任务
     *
     * @param processInstanceId 流程实例id
     * @param sourceTaskKey     源任务taskDefinitionKey
     * @param targetTaskKey     目标任务taskDefinitionKey，为空则返回到上一节点
     * @return
     */
    CommonResult rollbackTask(String processInstanceId, String sourceTaskKey, String targetTaskKey);
}
